package com.xcm.dao;

import com.github.pagehelper.Page;
import com.xcm.model.TbDeviceUpgrade;
import com.xcm.model.dto.FirmWareListDTO;
import com.xcm.model.vo.DeviceInfoListVO;
import com.xcm.model.vo.FirmWareListVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @ClassName FirmWareMapper
 * @Description 固件管理
 * @Author HanQinrui
 * @Date 2018/5/7 10:22
 * @Version 1.0
 **/
public interface FirmWareMapper {
    /**
     * 固件列表
     * @return
     */
    Page<FirmWareListDTO> listByPage();

    /**
     * 查询所有固件版本号
     * @return
     */
    List<String> listAllFirmWareVersionCode();

    /**
     * 获取更新固件下终端列表
     * @param hardVersion 固件版本号
     * @param deviceStatus 在线状态 0.在线; 1.离线
     * @param deviceModel 机型
     * @param groupCode 分组编码
     * @param province 省
     * @param city 市
     * @param county 区
     * @param deviceUpgradeId 固件ID
     * @return
     */
    Page<DeviceInfoListVO> updateFirmWareListByPage(@Param("hardVersion") String hardVersion, @Param("deviceStatus") String deviceStatus,
                                                    @Param("deviceModel") String deviceModel, @Param("groupCode") String groupCode,
                                                    @Param("province") String province, @Param("city") String city,
                                                    @Param("county") String county, @Param("deviceUpgradeId")String deviceUpgradeId);

    /**
     * 根据查询条件获取终端总数
     * @param deviceStatus 在线状态 0.在线; 1.离线
     * @param hardVersion  固件版本号
     * @param deviceModel 机型
     * @param groupCode   分组编码
     * @param province    省
     * @param city        市
     * @param area        区
     * @return
     */
    Long getDeviceOnlineCount(@Param("deviceStatus") int deviceStatus, @Param("hardVersion") String hardVersion,
                              @Param("deviceModel") String deviceModel, @Param("groupCode") String groupCode,
                              @Param("province") String province, @Param("city") String city, @Param("area") String area);

    /**
     * 根据终端Id修改固件升级Id
     * @param deviceInfoIds   终端Id(多个Id之间用逗号隔开)
     * @param deviceUpgradeId 固件Id
     * @return
     */
    Integer updateFirmWareUpgradeIdByDeviceInfoIds(@Param("deviceInfoIds") String deviceInfoIds, @Param("deviceUpgradeId") Integer deviceUpgradeId);

    /**
     * 根据固件Id查询固件名称和版本号
     * @param deviceUpgradeId
     * @return
     */
    FirmWareListVO getFirmWareByDeviceUpgradeId(String deviceUpgradeId);

    /**
     * 新增固件
     * @param deviceUpgrade 新增的固件对象
     */
    int saveFirmware(TbDeviceUpgrade deviceUpgrade);

    /**
     * 统计固件数量
     * @param deviceUpgrade 统计时的参数
     * @return
     */
    int countByParams(TbDeviceUpgrade deviceUpgrade);

    /**
     * 升级固件
     * @param deviceUpgrade
     * @return
     */
    int promoteFirmWare(TbDeviceUpgrade deviceUpgrade);
}
